package Vista;



import Datos.Fichero;
import Datos.Jugador;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import Imagenes.Imagenes;
import Musica.Audio;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;



public class Gameview extends Frame implements Runnable{

        
      
        Fichero f = new Fichero();
        Audio a;
        public int n;
        String cancion;
        public String nombre;
        public int objetivo;
        final int MAX = 1000;
        Menu menu = new Menu();
        int dificultad;
	BufferedImage bi=new BufferedImage(450,360,BufferedImage.TYPE_4BYTE_ABGR);
	Graphics gbi=bi.getGraphics();
	int fondo=1;
        private Jugador jugadorActual;
        private ArrayList<Jugador> listaJugadores=new ArrayList<>();
        File file;

	
	public Gameview(int num){
                //Jugador j = new Jugador();
               
		setVisible(true);
                a = menu.setCancion(num);
                a.start();
		setBounds(0, 0, 450, 360);
                
		addWindowListener(
				new WindowAdapter(){
					@Override
					public void windowClosing(WindowEvent arg0) {
						// TODO Auto-generated method stub
                                                System.exit(0);
						dispose();
					}
				}
		);
		addKeyListener(
				new KeyAdapter(){
					@Override
					public void keyPressed(KeyEvent arg0) {
						// TODO Auto-generated method stub
						super.keyPressed(arg0);
						switch(arg0.getKeyChar()){
							case '1':
                                                                
								fondo = 1;
                                                               
								repaint();
								break;
							case '2':
                                                                
								fondo = 2;
                                                                ;
								repaint();
								break;
							case '3':
                                                                
								fondo = 3;
                                                               
								repaint();
								break;
							case '4':
                                                                
								fondo = 4;
                                                               
                                                                
								repaint();
								break;
							case '5':
                                                                
								fondo = 5;
                                                              
								repaint();
								break;
						}
					}
				}
		);
		addMouseListener(
				new MouseAdapter(){
					@Override
					public void mousePressed(MouseEvent arg0) {
						// TODO Auto-generated method stub
						super.mouseClicked(arg0);
//                                                a=new Audio("disparo.wav");
//                                                a.start();
						disparar(arg0.getX(), arg0.getY());
                                               //a.stop();
					}
				}
		);
		(new Thread(this)).start();
	}
	
	int tiempo=0;
	int dianasTotal=0;

   
	
	public void update(Graphics g){
		paint(g);
	}
        
        
        
	public void paint(Graphics g){
		gbi.drawImage(Imagenes.leerFondo(fondo),0,0,this);
                if (dificultad == 4){
                    objetivo = 5;
                }
		for(int n=0;n<9;n++){
			for(int m=0;m<6;m++){
				if (objetivos[n][m]<20){
					int imagen=Math.min(objetivos[n][m],4);
					if (imagen>0){
						gbi.drawImage(Imagenes.leerObj(imagen,objetivo),n*50,m*50 + 40,50,50,this);
					}
				}else{
					gbi.drawImage(Imagenes.leerObj(5,objetivo),n*50,m*50 + 40,50,50,this);
				}
				
				//gbi.drawOval(n*50+8,m*50 + 40+8,34,34);
			}
		}
		gbi.setColor(Color.white);
		int dT=dianasTotal;
		if (dT==0) dT=1;
		gbi.drawString("Puntos:" + puntos + "/" + dianasTotal + " " + (100*puntos/dT) + "%", 20, 60);
		tiempo++;
		if (tiempo==MAX){
                    jugadorActual=new Jugador();
                    jugadorActual.nombre = this.nombre;
                    jugadorActual.dificultad = this.toDificultad(this.dificultad);
                    jugadorActual.puntos=this.puntos;
                     
                  
                   try {
                       
                            listaJugadores = f.leer();
                                                
                    } catch (IOException ex) {
                        Logger.getLogger(Gameview.class.getName()).log(Level.SEVERE, null, ex);
                    }
                   
                    listaJugadores.add(jugadorActual);
                    f.escribir(listaJugadores);
                                
                    Resultado r = new Resultado();
                    
                    a.stop(); 
                    r.setVisible(true);        
                    this.dispose();
                    
		}
		gbi.setColor(Color.black);
		gbi.fillRect(150, 50, 100, 10);
		gbi.setColor(Color.red);
		gbi.fillRect(150, 50, tiempo/10, 10);
		g.drawImage(bi,0,0,this);
	}

	public void disparar(int x, int y){
		for (int n=0;n<9;n++){
			for (int m=0;m<6;m++){
				int xD = n*50+8+17;
				int yD = m*50+40+8+17;
				if (objetivos[n][m]>4 && objetivos[n][m]<20){
					if (Math.sqrt(Math.pow(xD-x, 2)+Math.pow(yD-y, 2))<17){
						objetivos[n][m]=20;
						incDianas[n][m]=1;
						puntos++;

						repaint();
					}
				}
			}
		}
	}
	
	public void mover(){
		for (int n=0;n<9;n++){
			for (int m=0;m<6;m++){
				if (incDianas[n][m]==0){
					if (Math.random()<0.002){
						incDianas[n][m]=1;
						dianasTotal++;
					}
				}
				objetivos[n][m] += incDianas[n][m];
				if (objetivos[n][m]==15){
					incDianas[n][m]=-1;
				}
				if (objetivos[n][m]==0){
					incDianas[n][m]=0;
				}
				if (objetivos[n][m]==30){
					incDianas[n][m]=0;
					objetivos[n][m]=0;
				}
			}
		}
	}
	
	public int objetivos[][]=new int [9][6];
	public int incDianas[][]=new int [9][6];
	public int puntos;
	
	public void retardo(int ret){
		try{
                        
			Thread.sleep(ret);
 
                      
		}catch(Exception e){
		}
	}
   
    Toolkit toolkit = Toolkit.getDefaultToolkit();
   Imagenes imagen = new Imagenes();
   Point hotSpot = new Point(10,10);
   Cursor cursor = toolkit.createCustomCursor(imagen.muse("Mira1.png"), hotSpot, "Mira"); 
   
   
    
    public int setLevel(int level){//dificultad
          int aux=0;
          switch(level){
              case 1: aux = 70;
              setCursor(cursor);
              break;
              case 2: aux = 50;
              setCursor(cursor);
              break;
              case 3: aux = 20;
              setCursor(cursor);
              break;
              case 4: aux = 0;
              setCursor(cursor);
              break;
          }
          return aux;
        }
    public String toDificultad (int n){
        String s="";
        switch(n){
            case 1: s="Facil";break;
            case 2: s="Normal";break;
            case 3: s="Dificil";break;
            case 4: s="Chuck Norris";break;    
        }
        return s;
    }
	public void run(){
		while(true){
			retardo(setLevel(dificultad));
			mover();
			repaint();
		}
	}
}
